<?php 

function helper_ruta($raiz)
{
	$formato = 	' &#187; <a class="%s" href="' .
				sfContext::getInstance()->getRequest()->getPathInfoPrefix() .
				'%s">%s</a>';
 
	$path_info = sfContext::getInstance()->getRequest()->getPathInfo();
	$links = '';
	$clase = 'anterior';  //attributo class
	
	$links = $links . sprintf($formato, $clase, '/', $raiz);

	$path_len = strlen($path_info); 

	if($path_len > 1)
	{
		$offset = 0;
		$base = 0; //para el nombre del enlace
		do 
		{
			$offset = strpos($path_info, '/', $offset + 1);
			if($offset === false)
			{
				$offset = $path_len;
				$clase = 'actual';
			}

			$url = substr($path_info, 0, $offset);
			$name = str_replace('_', ' ', substr($url, $base + 1, $offset));
			$base = $offset;

			$links = $links . sprintf($formato, $clase, $url, ucfirst($name));		
		}
		while($offset < $path_len);
	}

	return $links;
}

function trunca_texto($texto)
{
	if(isset($texto[40]))
	{
		$pos = strpos($texto, ' ', 40);
		if($pos)
			return substr($texto, 0, $pos) . ' ...';
	}
	return $texto;
}

function tipo_objetivo_texto($tipo)
{
	if(isset(Constantes::$TIPOS_OBJETIVO[$tipo]))
		return Constantes::$TIPOS_OBJETIVO[$tipo];

	return '';
}

function modalidad_texto($modalidad)
{
	if(isset(Constantes::$MODALIDADES[$modalidad]))
		return Constantes::$MODALIDADES[$modalidad];

	return '';
}

function seccion_texto($seccion)
{
	if(isset(Constantes::$SECCIONES[$seccion]))
		return Constantes::$SECCIONES[$seccion];

	return '';
}

function caracteristica_unidad($caracteristica)
{
	if(isset(Constantes::$CARACTERISTICAS[$caracteristica]))
		return Constantes::$CARACTERISTICAS[$caracteristica];
	else 
		return 'No definido';
}

function estado_tesis($estado)
{
	if(isset(Constantes::$ESTADOS_TESIS[$estado]))
		return Constantes::$ESTADOS_TESIS[$estado];

	return '';
}

function duracion_unidad($duracion)
{
	if (isset(Constantes::$DURACION_UNIDADES[$duracion]))
		return Constantes::$DURACION_UNIDADES[$duracion];

	return '';
}

function estado_estudiante($estado)
{
	if (isset(Constantes::$ESTADOS_ESTUDIANTE[$estado]))
		return Constantes::$ESTADOS_ESTUDIANTE[$estado];

	return '';
}

function aprobacion_pertinencia($aprobado)
{
	return $aprobado ? 'Si' : 'No';
}

function link_to_curriculum($file)
{
	return link_to_file(sfConfig::get('curriculo_dir'), $file, '@anexo_curriculo');
}

function link_to_homologacion($file)
{
	return link_to_file(sfConfig::get('homologacion_dir'), $file, '@anexo_homologacion');
}

function link_to_file($dir, $file, $route)
{
	if ($file == '')
		return '<span>No se ha agregado un archivo</span>';

	$path = $dir . $file;

	if (file_exists($path))
		return sprintf('<a target="_blank" href="%s">%s</a>', url_for($route . '?file=' . $file), $file);
	else
		return $file . ' [El archivo no existe o es inaccesible]';
}

function link_to_related($name, $internal_uri)
{
	return '<a href="' . url_for($internal_uri) . '">' . $name . '</a>';
}

function echo_title($title)
{
	slot('title');
	echo $title;
	end_slot();
}

function diff($s1, $s2)
{ 
	$x = empty($s1) ? array() : explode(' ', $s1);
	$y = empty($s2) ? array() : explode(' ', $s2);

	$m = count($x);
	$n = count($y);

	$c = array_fill(0, $m + 1, array_fill(0, $n + 1, 0)); //matriz m+1 x n+1

	for ($i = 1; $i < $m + 1; $i++)
	{
		for ($j = 1; $j < $n + 1; $j++)
		{
			if ($x[$i-1] == $y[$j-1])
				$c[$i][$j] = $c[$i-1][$j-1] + 1;
			else
				$c[$i][$j] = max($c[$i-1][$j], $c[$i][$j-1]);
		}
	}

	$i = $m;
	$j = $n;

	$td1 = '</td>';
	$td2 = '</td>';
	
	while ($i != 0 && $j != 0)
	{
		if ($x[$i-1] == $y[$j-1])
		{
			$td1 = $x[--$i] . ' ' . $td1;
			$td2 = $y[--$j] . ' ' . $td2;
		}
		elseif ($c[$i-1][$j] >= $c[$i][$j-1])
			$td1 = '<ins>' . $x[--$i] . '</ins> ' . $td1;
		elseif ($c[$i-1][$j] < $c[$i][$j-1])
			$td2 = '<ins>' . $y[--$j] . '</ins> ' . $td2;
	}
	
	while ($i > 0) 
		$td1 = '<ins>' . $x[--$i] . '</ins> ' . $td1;
	while ($j > 0)
		$td2 = '<ins>' . $y[--$j] . '</ins> ' . $td2;

	return '<td>' . $td1 . '<td>' . $td2;
}

function diff_simple($s1, $s2)
{
	$format = '<td>%s</td><td>%s</td>';
	
	if ($s1 == $s2)
		return sprintf($format, $s1, $s2);
	else
		return sprintf($format, '<ins>' . $s1 . '</ins>', '<ins>' . $s2 . '</ins>');
}
